package com.aiguigu.lottery.prize.service;

import com.aiguigu.lottery.common.entity.PrizeEntity;
import com.aiguigu.lottery.common.entity.PrizeRecordEntity;

import java.util.List;

/**
 * 奖品服务接口
 */
public interface PrizeService {
    
    /**
     * 创建奖品
     */
    boolean createPrize(PrizeEntity prize, Integer userId);
    
    /**
     * 根据用户名创建奖品
     */
    boolean createPrizeByUsername(PrizeEntity prize, String username);
    
    /**
     * 更新奖品
     */
    boolean updatePrize(PrizeEntity prize, Integer userId);
    
    /**
     * 根据用户名更新奖品
     */
    boolean updatePrizeByUsername(PrizeEntity prize, String username);
    
    /**
     * 删除奖品
     */
    boolean deletePrize(Integer prizeId, Integer userId);
    
    /**
     * 根据用户名删除奖品
     */
    boolean deletePrizeByUsername(Integer prizeId, String username);
    
    /**
     * 获取所有启用的奖品
     */
    List<PrizeEntity> getAllEnabledPrizes();
    
    /**
     * 获取所有奖品
     */
    List<PrizeEntity> getAllPrizes(Integer userId);
    
    /**
     * 根据用户名获取所有奖品
     */
    List<PrizeEntity> getAllPrizesByUsername(String username);
    
    /**
     * 获取所有奖品（无权限检查）
     */
    List<PrizeEntity> getAllPrizes();
    
    /**
     * 抽奖
     */
    PrizeEntity drawPrize(Integer userId);
    
    /**
     * 根据用户名抽奖
     */
    PrizeEntity drawPrizeByUsername(String username);
    
    /**
     * 抽奖（无用户信息）
     */
    PrizeEntity drawPrize();
    
    /**
     * 保存中奖记录
     */
    boolean savePrizeRecord(PrizeRecordEntity record);
    
    /**
     * 根据用户名删除中奖记录
     */
    boolean deletePrizeRecordByUsername(Integer recordId, String username);
    
    /**
     * 根据用户名获取中奖记录
     */
    List<PrizeRecordEntity> getPrizeRecordsByUsername(String username);
    
    /**
     * 获取用户中奖记录
     */
    List<PrizeRecordEntity> getUserPrizeRecords(Integer userId);
    
    /**
     * 获取用户中奖记录（根据用户名）
     */
    List<PrizeRecordEntity> getUserPrizeRecords(String username);
    
    /**
     * 获取所有中奖记录
     */
    List<PrizeRecordEntity> getAllPrizeRecords(Integer userId);
    
    /**
     * 获取所有中奖记录（无权限检查）
     */
    List<PrizeRecordEntity> getAllPrizeRecords();
    
    /**
     * 根据用户ID获取中奖记录
     */
    List<PrizeRecordEntity> getPrizeRecordsByUserId(Integer userId);
    
    /**
     * 删除中奖记录
     */
    boolean deletePrizeRecord(Integer recordId, Integer userId);
    
    /**
     * 检查管理权限
     */
    boolean hasManagePermission(Integer userId);
    
    /**
     * 检查奖品库存
     */
    Integer checkPrizeStock(Integer prizeId);
    
    /**
     * 减少奖品库存
     */
    boolean decreasePrizeStock(Integer prizeId);
    
    /**
     * 更新奖品库存
     */
    boolean updatePrizeStock(Integer prizeId, Integer total, Integer remaining);
    
    /**
     * 获取有库存的奖品列表
     */
    List<PrizeEntity> getAvailablePrizes();
    
    /**
     * 批量设置奖品库存
     */
    boolean batchUpdatePrizeStock(List<PrizeEntity> prizes);
}